perm filename DPYIII.FAI[CAR,BGB] blob sn#001350 filedate 1972-11-21 generic text, type T, neo UTF8
00100	TITLE DISPLY  -- DISPLAY PRIMITIVES
00200
00300	;ALTERNATE PDP-10 MNEMONICS.
00400		OPDEF LAC[MOVE]↔OPDEF DAC[MOVEM]↔OPDEF GO[JRST]
00500	;SAIL CONVENTIONS.
00600		DEFINE SUBR(NAME){INTERN NAME↔NAME:}
00700		DEFINE ARG1<-1(17)>
00800		DEFINE ARG2<-2(17)>
00900		DEFINE POP1J<GO POP1J.>
01000		DEFINE POP2J<GO POP2J.>
01100	;DISPLAY UUO CODES.
01200		OPDEF DPYPOS [XWD 702100,0]
01300		OPDEF DPYSIZ [XWD 702140,0]
01400		OPDEF DPYCLR [XWD 701000,0]
01500		OPDEF UPG [XWD 703000,0]
01600		OPDEF GETLIN [TTYUUO 6,]
01700
01800
01900	A←1
02000	B←2
02100	C←3
02200
02300	SP←16
02400	P←17
02500		POP1J.:	SUB P,[2,2]↔JRST @2(P)
02600		POP2J.:	SUB P,[3,3]↔JRST @3(P)
02700	
02800
02900	INTERNAL DPYSET,AIVECT,AVECT,APT,RIVECT,RVECT,RPT
03000	INTERNAL APOINT,RPOINT
03100	INTERNAL DPYOUT,HYDPOG
03200	INTERNAL DPYCLR,DPYBIG,DPYBRT,DPYRESET,DPYPARS
03300	INTERNAL CLRBFR,DTYO,DPYSST
03400
03500		RV←←6
03600		AV←←106
03700		VIS←←0
03800		EP←←20
03900		INV←←40
04000		SVS←100
04100		SV←2
04200	
04300		DEFINE COMPAT(N)<POP P,RETURN↔JSP COMP-N>
04400	
04500		POP P,5
04600		POP P,4
04700		POP P,3
04800		POP P,2
04900		POP P,1
05000	COMP:	JRST @0
     

00100	;EXTERNAL PROCEDURE AIVECT(INTEGER X,Y)
00200	;EXTERNAL PROCEDURE AVECT(INTEGER X,Y)
00300	;EXTERNAL PROCEDURE APT(INTEGER X,Y)
00400	AIVECT:	MOVEI C,INV+AV
00500		GO LV
00600	AVECT:	MOVEI C,VIS+AV
00700		GO LV
00800	APOINT:
00900	APT:	MOVEI C,EP+AV
01000	LV:	COMPAT(2)
01100		SKIPGE IGNORE↔GO @RETURN
01200	LVC:	DPB A,[POINT 11,C,10]
01300		DPB B,[POINT 11,C,21]
01400	LV2:	AOS A,DPYPTR
01500		DAC C,(A)
01600	LV3:	HRLI A,<(<POINT 7,0,35>)>
01700		DAC A,DPYPTR
01800		HRRZI A,(A)
01900		CAML A,BUFEND
02000		SETOM IGNORE
02100		GO @RETURN
     

00100	;EXTERNAL PROCEDURE RIVECT(INTEGER X,Y)
00200	;EXTERNAL PROCEDURE RVECT(INTEGER X,Y)
00300	;EXTERNAL PROCEDURE RPT(INTEGER X,Y)
00400	RIVECT:	MOVEI C,INV+RV
00500		GO RVG
00600	RVECT:	MOVEI C,VIS+RV
00700		GO RVG
00800	RPOINT:
00900	RPT:	MOVEI C,EP+RV
01000	RVG:	COMPAT(2)
01100		SKIPE RELFLG#
01200		GO LVC
01300		CAML A,[-SVS]
01400		CAIL A,SVS
01500		GO LVC
01600		CAML B,[-SVS]
01700		CAIL B,SVS
01800		GO LVC
01900		ANDCMI C,RV	;CAN CONSTRUCT SHORT VECTOR
02000		DPB A,[POINT 7,C,22]
02100		DPB B,[POINT 7,C,29]
02200		LSH C,20
02300		ORI C,SV+INV	;MAKE 2ND VECTORE INVISIBLE - ZERO LENGTH
02400		LAC A,@DPYPTR
02500		TLZ A,777774
02600		CAIE A,(C);WAS LAST DPY OUTPUT HALF A SHORT VECTOR.
02700		GO LV2	;NO
02800		LSH C,-24	;YES, PUT IT THERE
02900		DPB C,[POINT 16,@DPYPTR,31]
03000		HRRZ A,DPYPTR
03100		GO @RETURN
03200	
03300	INTERNAL NORELOPT,RELOPT
03400	NORELOPT:SETOM RELFLG
03500		POPJ P,
03600	
03700	RELOPT:	SETZM RELFLG
03800		POPJ P,
     

00100	;EXTERNAL PROCEDURE DTYO(INTEGER CHAR)
00200	;EXTERNAL PROCEDURE DPYSST(STRING S);
00300	
00400	DTYO:	COMPAT(1)
00500		IDPB A,DPYPTR
00600		HRRZ A,DPYPTR
00700		CAML A,BUFEND
00800		SETOM IGNORE
00900		GO @RETURN
01000	
01100	DPYSST:	POP SP,1
01200		POP SP,2
01300		SKIPGE IGNORE↔POPJ P,
01400		HRRZS 2		;LENGTH
01500		JUMPLE 2,SSRET
01600		ILDB 3,1
01700		IDPB 3,DPYPTR
01800		SOJG 2,.-2
01900	SSRET:	HRRZ 1,DPYPTR
02000		CAML 1,BUFEND
02100		SETOM IGNORE
02200		POPJ P,
     

00100	;EXTERNAL PROCEDURE DPYOUT(INTEGER PIECE_OF_GLASS)
00200	;EXTERNAL PROCEDURE DPYCLR;
00300	;EXTERNAL PROCEDURE DPYBIG(INTEGER SIZE);
00400	;EXTERNAL PROCEDURE HYDPOG(INTEGER PIECE_OF_GLASS)
00500	;EXTERNAL PROCEDURE CLRBFR;
00600	;EXTERNAL PROCEDURE DPYSET(INTEGER ARRAY BUF);
00700	DPYBIG:	COMPAT(1)
00800		MOVEI 3,INV+RV	;ZERO LENGTH RELATIVE-INVISIBLE VECTOR
00900		DPB 1,[POINT 3,3,27]
01000		GO LV2
01100	DPYBRT:	COMPAT(1)
01200		MOVEI 3,INV+RV
01300		DPB 1,[POINT 3,3,24]
01400		GO LV2
01500	DPYCLR:	SKIPL DPYFLG#
01600		DPYCLR
01700		MOVSI 777774
01800		DAC POGWD
01900		SETZM BUFHD
02000		POPJ P,
02100	DPYOUT:	PUSHJ P,DPYPARS
02200		HRRZ B,DPYPTR
02300		SUB B,BUFHD
02400		ADDI B,1
02500		DAC B,BUFHD+1
02600	SH2:	COMPAT(1)
02700		DPB A,[POINT 4,SH1,12]
02800		OR A,DPYFLG
02900		SKIPL A
03000	SH1:	UPG BUFHD
03100	FALSE:	MOVEI A,0
03200		GO @RETURN
03300	
03400	CLRBFR:	COMPAT(0)
03500		GO CLR2
03600	
03700	DPYSET:	SETZM DPYFLG
03800		COMPAT(1)
03900		ADDI 1,2
04000		DAC 1,BUFHD
04100		HRRZ 2,-3(1)	;SIZE
04200		ADDI 2,-3(1)
04300		SUBI 2,1
04400		SETZM IGNORE
04500		DAC 2,BUFEND
04600	CLR2:	LAC A,BUFHD
04700		MOVEI B,1
04800		DAC B,1(A)
04900		MOVEI B,2(A)
05000		HRLI B,1(A)
05100		BLT B,@BUFEND	;SET DPY BUFFER TO NULL CHARACTER WORDS
05200		GO LV3
     

00300	HYDPOG:	SETZM BUFHD+1
00400		GO SH2
00500
00600	DPYPARS:	SKIPN 1,BUFHD
00700		POPJ P,
00800		LAC 2,DPYPTR
00900		DAC 2,-2(1)
01000		MOVEI 2,2(2)
01100		SUB 2,1
01200		DAC 2,-1(1)
01300		POPJ P,
01400	
01500	DPYRESET:	COMPAT(1)
01600		ADDI 1,2
01700		DAC 1,BUFHD
01800		HRRZ 2,-3(1)
01900		ADDI 2,-3(1)
02000		DAC 2,BUFEND
02100		HRRZ 1,-2(1)
02200		GO CLR2+1
02300	
02400	INTERNAL DPYTYP,TYPLOC
02500	DPYTYP:	SETZM DPYFLG
02600		COMPAT(3)
02700		SKIPGE DPYFLG
02800		GO @RETURN
02900		DPYPOS(1)	;POSITION
03000		DPB 2,[POINT 9,3,26]
03100		DPYSIZ (3)
03200		GO @RETURN
03300	
03400	TYPLOC:	SETZM DPYFLG
03500		COMPAT(2)
03600		SKIPGE DPYFLG
03700		GO @RETURN
03800		DPYPOS (1)
03900		SUB 1,2
04000		IDIVI 1,=23
04100		CAIG 1,2
04200		MOVEI 1,3
04300		DPYSIZ 1000-2(1)
04400		GO @RETURN
     

00100	;SAIL DECLARATIONS
00200	;EXTERNAL PROCEDURE PGSEL(INTEGER POG)
00300	
00400	INTERNAL PGSEL,GETPOG,RELPOG
00500	PGSEL:	COMPAT(1)
00600		JUMPL 1,@RETURN
00700		SKIPL DPYFLG
00800		PGSEL 1
00900		GO @RETURN
01000	
01100	
01200	POGWD:	XWD 777774,0
01300	
01400	GETPOG:	LAC POGWD
01500		JFFO .+2
01600		MOVNI 1,1
01700		ROT (1)
01800		TLZ 400000
01900		MOVN 2,1
02000		ROT(2)
02100		DAC POGWD
02200		POPJ P,
02300	
02400	RELPOG:	LAC 1,-1(P)
02500		LAC POGWD
02600		ROT (1)
02700		TLO 400000
02800		MOVN 2,1
02900		ROT(2)
03000		DAC POGWD
03100		GO HYDPOG
03200	IGNORE:	0
03300	
03400	RETURN:	0
03500	
03600	
03700	INTERNAL DPYPTR;
03800	DPYPTR:	0
03900	BUFEND:	0
04000	BUFHD:	0
04100		0
04200
04300	END
04400	DPYIII.FAI - EOF.